/*
    The I Ching (the Book of Changes) plasmoid.
    Copyright (C) 2002-2009 Jean Pierre Charalambos.

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.

*/

#ifndef RELATIONSHIP_H
#define RELATIONSHIP_H

#include <QObject>
#include "hexagram.h"

class Relationship : public QObject {
        Q_OBJECT
    public:
        Relationship ( const Hexagram * hex ) : refHexagram ( hex ) {
            connect ( hex, SIGNAL ( changed() ), this, SLOT ( setRelations() ) );
        }
        ~Relationship() {
            stepOfChangeIDs.clear();
        }
        const Hexagram * getRefHexagram() const {
            return refHexagram;
        }
        void setRefHexagram ( const Hexagram * hex ) {
            refHexagram = hex;
            setRelations();
        }
        int getSecondHexagramID() const {
            return secondID;
        }
        int getSequenceHexagramID() const {
            return sequenceID;
        }
        int getConstrastHexagramID() const {
            return contrastID;
        }
        int getShadowHexagramID() const {
            return shadowID;
        }
        int getNuclearHexagramID() const {
            return nuclearID;
        }
        const QVector<int> & getStepOfChange() const {
            return stepOfChangeIDs;
        }

    signals:
        void changed ( void );

    public slots:
        void setRelations() {
            second( );
            sequence( );
            constrast( );
            shadow( );
            nuclear( );
            stepOfChange();
            emit changed();
        }

    protected slots:
        //public slots:
        void second ( void );
        void sequence ( void );
        void constrast ( void );
        void shadow ( void );
        void nuclear ( void );
        void stepOfChange ( void );

    protected:
        const Hexagram * refHexagram;
        int secondID, sequenceID, contrastID, shadowID, nuclearID;
        QVector<int> stepOfChangeIDs;
};

#endif // RELATIONSHIP_H
